Prefetching is a technique for moving data objects up in the memory hierarchy before the data objects are actually required. Movement of data improves the access latency if they are subsequently requested. In a disk array, for instance, prefetching moves data from disks to the disk array cache, from the disk array to the host memory, and from the host memory to the processor cache. Since the input/output (I/O) latency of the disk array is much slower than the processing speed of the host, prefetched data located in the cache at the time of a request helps avoid disk I/O latency.
Currently, numerous existing techniques are known for prefetching data. These techniques, however, are largely in the context of a single storage node. Many techniques for single nodes assume that the I/O requests are all local to the storage node and all requests can be observed. For example, some techniques use a “just in time” prefetching on a single storage node by estimating the amount of time it will take to fetch the data from disk and by scheduling the request so that the prefetch will finish just as the data request arrives (assuming it arrives at the predicted time). Other prediction techniques rely on some knowledge of the application, and some techniques have been applied to prefetching data from disks.